package designpatterns.visitor;

/**
 * 访问者模式（Visitor）
 * 将作用于某种数据结构中的各元素的操作分离出来封装成独立的类，使其在不改变数据结构的前提下可以添加作用于这些元素的新操作，为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离。
 * 将操作从对象结构分离，支持新操作而不修改类。‌
 */
public class Client {
    public static void main(String[] args) {
        ObjectStructure objectStructure = new ObjectStructure();
        objectStructure.add(new Element1());
        objectStructure.add(new Element2());

        Visitor visitor1 = new Visitor1();
        objectStructure.accept(visitor1);
        System.out.println("------------------------------");
        Visitor visitor2 = new Visitor2();
        objectStructure.accept(visitor2);
    }
}
